const baseURL = 'https://zdwceshi.uno:8090'; // 你的API基础URL
// const baseURL = 'http://localhost:8090';
export function request(options) {
  // 显示加载提示框
  wx.showLoading({
    title: '加载中...',
  });
  // 尝试从本地存储中获取 token
  const token = wx.getStorageSync('token') || null;
  console.log('token==' + token)
  return new Promise((resolve, reject) => {
    wx.request({
      url: baseURL + options.url,
      data: options.data || {},
      method: options.method || 'get',
      header: {
        // 'User-Agent':"miniProgram",
        'content-type': options.header ? options.header['content-type'] : 'application/json',
        'Authorization': token ? token : '',
      },
      success: res => {
        // 隐藏加载提示框
        wx.hideLoading();
        // --- 添加 401 错误处理 ---
        if (res.statusCode === 401) {
          wx.removeStorageSync('token'); // 删除本地 token
          wx.showModal({
            title: '登录失效',
            content: '您的登录已失效，请重新登录',
            showCancel: false, // 只显示确定按钮
            confirmText: '去登录',
            success: (modalRes) => {
              if (modalRes.confirm) {
                // 跳转到登录页面，根据您的项目结构修改路径
                wx.reLaunch({
                  url: '/pages/login/login'
                });
              }
            }
          });
          reject(res); // 拒绝 Promise，防止后续处理
          return; // 提前返回，不再执行 resolve
        }
        // --- 401 处理结束 ---
        resolve(res)
      },
      fail: err => { 
        // 隐藏加载提示框 
        wx.hideLoading(); 
        // 错误处理 
        let errMsg = '网络异常，请检查网络'; 
        if (err.errMsg.includes('timeout')) { 
          errMsg = '请求超时，请点击重试'; 
        } else if (err.errMsg.includes('request:fail')) { 
          errMsg = '网络连接失败，请点击重试'; 
        } 
        
        // 封装请求逻辑 
        const sendRequest = () => { 
          wx.hideLoading(); // 确保loading被关闭
          wx.showLoading({ 
            title: '加载中...',
            mask: true // 添加遮罩防止重复点击
          }); 
          wx.request({ 
            url: baseURL + options.url, // 确保使用完整URL 
            data: options.data || {}, 
            method: options.method || 'get', 
            header: { 
              'content-type': options.header ? options.header['content-type'] : 'application/json', 
              'Authorization': token ? token : '' 
            }, 
            success: (res) => { 
              wx.hideLoading(); 
              resolve(res); 
            }, 
            fail: (newErr) => { 
              wx.hideLoading(); 
              // 再次失败时，重新显示重试弹窗 
              wx.showModal({ 
                title: '请求失败', 
                content: errMsg, 
                showCancel: false, 
                confirmText: '重试', 
                success: (modalRes) => { 
                  if (modalRes.confirm) { 
                    setTimeout(() => {
                      sendRequest(); // 递归调用重试 
                    }, 100); // 添加短暂延时确保模态框完全关闭
                  } 
                } 
              }); 
            } 
          }); 
        }; 
        
        // 首次失败时显示重试弹窗 
        wx.showModal({ 
          title: '请求失败', 
          content: errMsg, 
          showCancel: false, 
          confirmText: '重试', 
          success: (modalRes) => { 
            if (modalRes.confirm) { 
              setTimeout(() => {
                sendRequest(); // 调用重试请求 
              }, 100); // 添加短暂延时确保模态框完全关闭
            } else { 
              reject(err); // 用户取消时拒绝Promise 
            } 
          } 
        }); 
      }
    })
  })
}

// 新增文件上传专用方法
export function uploadFile(filePath, formData = {}) {
  // 显示加载提示框
  wx.showLoading({
    title: '上传中...',
  });

  // 尝试从本地存储中获取 token
  const token = wx.getStorageSync('token') || null;
  return new Promise((resolve, reject) => {
    wx.uploadFile({
      url: baseURL + '/upload',
      filePath: filePath,
      name: 'file', // 服务器接收文件的字段名
      formData: formData,
      header: {
        'Authorization': token ? token : '',
      },
      success: res => {
        // 隐藏加载提示框
        wx.hideLoading();
        // 注意：wx.uploadFile 返回的 res.data 是字符串，需要手动转为对象
        if (typeof res.data === 'string') {
          res.data = JSON.parse(res.data);
        }
        resolve(res);
      },
      fail: err => {
        // 隐藏加载提示框
        wx.hideLoading();
        reject(err);
      }
    });
  });
}

